//课时12
/*输入3 4 5 6 7 9999一串整数，9999代表结束，通过尾插法新建链表，
查找第二个位置的值并输出，在2个位置插入99，输出为  3 99  4  5  6  7，删除第4个位置的值，打印输出为  3 99  4  6  7。*/

#include <stdio.h>
#include <stdlib.h>

struct ListNode
{
    int data;
    struct ListNode *next;
};

struct ListNode* BuyNode(int val)
{
    struct ListNode* node=(struct ListNode*)malloc(sizeof(struct ListNode));
    if(node==NULL)
    {
        perror("malloc fail\n");
    }
    node->data=val;
    node->next=NULL;
    return node;
}

//尾插
void TailPush(struct ListNode* h,int val)
{
    struct ListNode* node=BuyNode(val);
    while(h->next)
    {
        h=h->next;
    }
    h->next=node;
}

void PrintList(struct ListNode* L)
{
    L = L->next;
    while (L != NULL)
    {
        printf("%3d", L->data);//打印当前结点数据
        L = L->next;//指向下一个结点
    }
    printf("\n");
}

int main() {
    //声明一个头节点
    struct ListNode head;
    head.next=NULL;
    int num;
    while(scanf("%d",&num))
    {
        if(num==9999)
        {
            break;
        }
        //尾插链表
        TailPush(&head,num);
    }
    //查找第二个位置的值
    printf("%d\n",head.next->next->data);

    //在2个位置插入99
    struct ListNode* node=BuyNode(99);
    node->next=head.next->next;
    head.next->next=node;
    //打印输出
    PrintList(&head);

    //删除第4个位置的值
    //找到第五个位置的结点
    struct ListNode* five=head.next->next->next->next->next;
    //找到第三个位置的结点
    struct ListNode* three=head.next->next->next;
    //释放第四个结点
    free(head.next->next->next->next);
    three->next=five;
    //打印
    PrintList(&head);
    return 0;
}
